第12章 契約が破られるとき:例外処理
結論
例外処理とは、予想外の実行時状態に対処するメカニズムである。
失敗とは、ルーチンの実行で、契約を満足させられなくなることである。
自分が呼び出したルーチンの失敗によって、ルーチンは例外を受け取る。
ソフトウェアシステムがわざと「開発者例外」を起こすことがある。
ルーチンはリトライか組織的なパニックのどちらかで例外を処理する。リトライとは、ルーチン本体を再び実行することであり、組織的なパニックとはルーチンを失敗にして、そのルーチンを呼び出したものに例外を送る。
リトライを一度もしないで終わる場合、例外ハンドラの正式な役割は不変表明をリストアすることである。一方、リトライをして終わる場合は、リトライに至る分岐での正式な役割は不変表明と事前条件をリストアすることである。その結果、ルーチンの本体は再び契約を達成しようとすることができる。
例外を取り扱う基本的な言語、機構はシンプルさを保たなければならないが、きちんとした例外処理は実現しなければならない。例外や状況や処理に対するきめ細かい制御が必要なアプリケーションに対しては、EXPECTIONSと呼ばれるライブラリを利用することができる。このライブラリには、例外の種類を区別するメカニズムや、同様に開発者定義の例外を発生させるメカニズムも提供されている。